/*
Rilego - An easy Images 2 E-Book converter.
Copyright (C) 2011  Federico Improta (Kirys)

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 */
package it.kirys.rilego.engine.processors.imagefilters;

import com.jhlabs.image.SmartBlurFilter;
import java.awt.image.BufferedImage;

/**
 *
 * @author Federico Improta
 */
public class SmartSmoothFilter implements IImageFilter {

	public enum SmoothLevel {

		Normal("Normal", 4, 8);
		String label;
		int radius;
		int threshold;

		public String getLabel() {
			return label;
		}

		public int getRadius() {
			return radius;
		}

		public int getThreshold() {
			return threshold;
		}

		private SmoothLevel(String label, int radius, int threshold) {
			this.label = label;
			this.radius = radius;
			this.threshold = threshold;
		}
	}
	SmoothLevel level;

	public SmoothLevel getLevel() {
		return level;
	}

	public void setLevel(SmoothLevel level) {
		this.level = level;
	}

	@Override
	public BufferedImage filter(BufferedImage source) {
		BufferedImage out = null;
		SmartBlurFilter f = new SmartBlurFilter();
		f.setRadius(level.radius);
		f.setThreshold(level.threshold);
		out = f.createCompatibleDestImage(source, null);
		f.filter(source, out);
		return out;
	}

	@Override
	public IImageFilter clone() {
		SmartSmoothFilter filter = new SmartSmoothFilter();
		filter.level = this.level;
		return filter;
	}

	public SmartSmoothFilter() {
		level = SmoothLevel.Normal;
	}
}
